home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / AGSMC10.ZIP / AGSMC.PPE (.txt) < prev    next >
PCBoard Programming Language Executable  |  1995-02-27  |  24KB  |  1,555 lines

  1. ;------------------------------------------------------------------------------
  2. ;                                                   .ss.
  3. ;                                                   `²²'
  4. ;             .,sS$Ss,,s$  .,sS$$$Ss.  .,sS$Ss,,s$ .ss.  .sSs.
  5. ;           .d$$²^°²$$$$'.d$P²°^^²$P'.d$$²^°²$$$$'.$$$' .$$$²Sb,.
  6. ;           $$$'   .$$$' $$$²Sçsµ²' .$$$'   .$$$'.$$$' .$$$'  `$$b.
  7. ;           $$$b,,d$$$' ,$$$b,....,s$$$$b,,d$$$'.$$$;.,$$$'    ;$$$
  8. ;           `²S$$S²²S$$S²°²S$$$$S²°°²S$$$$$$',$$S²°²S$S'.sS$$$P²'
  9. ;                                    .sS²°$$$²²°"'       d²°'
  10. ;                                  .$$²  .$$'
  11. ;                                  $$$.,d$$'
  12. ;                                  `²S$$S²'
  13. ;------------------------------------------------------------------------------
  14. ; P.P.L.X. 2.OO                          (C)1996 - Lone Runner / AEGiS CoRP'96 
  15. ;------------------------------------------------------------------------------
  16. ; PPE 3.O1 (Encryption type I) - Analysis ON - Postprocessing ON
  17. ;------------------------------------------------------------------------------
  18.  
  19.     Boolean  BOOLEAN001
  20.     Boolean  BOOLEAN002
  21.     Boolean  BOOLEAN003
  22.     Boolean  BOOLEAN004
  23.     Boolean  BOOLEAN005
  24.     Boolean  BOOLEAN006
  25.     Boolean  BOOLEAN007
  26.     Boolean  BOOLEAN008
  27.     Boolean  BOOLEAN009
  28.     DWord    TDWORD001(9)
  29.     DWord    DWORD002
  30.     Integer  INTEGER001
  31.     Integer  INTEGER002
  32.     Integer  INTEGER003
  33.     Integer  INTEGER004
  34.     Integer  INTEGER005
  35.     Integer  INTEGER006
  36.     Integer  INTEGER007
  37.     Integer  INTEGER008
  38.     Integer  INTEGER009
  39.     Integer  INTEGER010
  40.     Integer  INTEGER011
  41.     Integer  INTEGER012
  42.     Integer  INTEGER013
  43.     Integer  INTEGER014
  44.     String   STRING001
  45.     String   STRING002
  46.     String   STRING003
  47.     String   STRING004
  48.     String   STRING005
  49.     String   STRING006
  50.     String   STRING007
  51.     String   STRING008
  52.     String   STRING009
  53.     String   STRING010
  54.     String   STRING011
  55.     String   STRING012
  56.     String   STRING013
  57.     String   STRING014
  58.     String   STRING015
  59.     String   STRING016
  60.     String   STRING017
  61.     String   STRING018
  62.     String   STRING020
  63.     String   STRING022
  64.     String   STRING024
  65.     Word     WORD001
  66.     Word     WORD002
  67.     Word     TWORD003(9)
  68.     Word     WORD004
  69.     BigStr   BIGSTR001
  70.     BigStr   BIGSTR002
  71.     BigStr   BIGSTR003
  72.     BigStr   BIGSTR004
  73.     BigStr   BIGSTR005
  74.     BigStr   BIGSTR006
  75.     BigStr   BIGSTR009
  76.     Declare  Function FUNCTION001() BigStr
  77.     Declare  Function FUNCTION002() String
  78.     Declare  Function FUNCTION003(String STRING019) String
  79.     Declare  Function FUNCTION004() String
  80.     Declare  Function FUNCTION005(Word WORD008) BigStr
  81.     Declare  Function FUNCTION006(String STRING023) String
  82.     Declare  Procedure PROC001()
  83.     Declare  Procedure PROC002(Boolean BOOLEAN010)
  84.     Declare  Procedure PROC003(BigStr BIGSTR007, Word WORD005)
  85.     Declare  Procedure PROC004(String STRING021, Word WORD006)
  86.     Declare  Procedure PROC005()
  87.     Declare  Procedure PROC006()
  88.     Declare  Procedure PROC007()
  89.     Declare  Procedure PROC008(Int INT001)
  90.     Declare  Procedure PROC009()
  91.     Declare  Procedure PROC010(Int INT002, Int INT003)
  92.     Declare  Procedure PROC011(BigStr BIGSTR008, Word WORD007)
  93.     Declare  Procedure PROC012()
  94.     Declare  Procedure PROC013()
  95.     Declare  Procedure PROC014()
  96.     Declare  Procedure PROC015(BigStr BIGSTR010, Word WORD009)
  97.     Declare  Procedure PROC016(String STRING025)
  98.  
  99. ;------------------------------------------------------------------------------
  100.  
  101.     RdUNet PcbNode()
  102.     WrUNet PcbNode(), "G", UN_Name(), UN_City(), "", ""
  103.     STRING013 = ReadLine(PPEPath() + "GROUP.CFG", 1)
  104.     STRING015 = ReadLine(PPEPath() + "GROUP.CFG", 2)
  105.     STRING014 = ReadLine(PPEPath() + "GROUP.CFG", 3)
  106.     STRING016 = ReadLine(PPEPath() + "GROUP.CFG", 4)
  107.     INTEGER012 = S2I(ReadLine(PPEPath() + "GROUP.CFG", 5), 10)
  108.     STRING017 = ReadLine(PPEPath() + "GROUP.CFG", 6)
  109.     INTEGER013 = S2I(ReadLine(PPEPath() + "GROUP.CFG", 7), 10)
  110.     BOOLEAN006 = S2I(ReadLine(PPEPath() + "GROUP.CFG", 8), 10)
  111.     BOOLEAN007 = S2I(ReadLine(PPEPath() + "GROUP.CFG", 9), 10)
  112.     BOOLEAN008 = S2I(ReadLine(PPEPath() + "GROUP.CFG", 10), 10)
  113.     BOOLEAN009 = S2I(ReadLine(PPEPath() + "GROUP.CFG", 11), 10)
  114.     FClose -1
  115.     STRING009 = PPEPath() + "WORK\ORG.DAT"
  116.     STRING010 = PPEPath() + "GROUP.LOG"
  117.     STRING011 = PPEPath() + "WORK\FREEZE.SEM"
  118.     STRING008 = GetToken()
  119.     WORD001 = S2I(STRING008, 10)
  120.     If ((WORD001 >= 3) && (WORD001 <= 10)) INTEGER006 = WORD001
  121.     PROC006()
  122.     INTEGER004 = INTEGER011
  123.     If (INTEGER004 == 10) INTEGER004 = 0
  124.     If (Exist(PPEPath() + "WORK\CHAT." + String(INTEGER004))) Delete PPEPath() + "WORK\CHAT." + String(INTEGER004)
  125.     If (Exist(PPEPath() + "WORK\ZAP." + String(INTEGER004))) Delete PPEPath() + "WORK\ZAP." + String(INTEGER004)
  126.     If (Exist(PPEPath() + "WORK\PVT." + String(INTEGER004))) Delete PPEPath() + "WORK\PVT." + String(INTEGER004)
  127.     If (Exist(PPEPath() + "WORK\SWAP." + String(PcbNode()))) Delete PPEPath() + "WORK\SWAP." + String(PcbNode())
  128.     Cls
  129.     StartDisp 1
  130.     PrintLn "@POFF@"
  131.     PROC009()
  132.     PROC001()
  133.     INTEGER014 = Time()
  134.     PROC004("    WeLCoMe iNTo THe AEGiS CoRP FuLL SCReeN MuLTI CHaT ! TyPE /? FoR HeLP!", INTEGER011)
  135.     CdChkOff
  136.     While (1) Do
  137.         If (!CDOn() && !OnLocal()) Goto LABEL018
  138.         BIGSTR001 = FUNCTION001()
  139.         If ((Upper(Left(BIGSTR001, 6)) == "/HELP ") || (Left(BIGSTR001, 3) == "/? ")) Then
  140.             SaveScrn
  141.             DispFile PPEPath() + "HELP", 0 + 4
  142.             CdChkOn
  143.             Wait
  144.             CdChkOff
  145.             StartDisp 1
  146.             RestScrn
  147.             Continue
  148.         Endif
  149.         If (Upper(Left(BIGSTR001, 6)) == "/LOCK ") Then
  150.             FOpen 1, PPEPath() + "WORK\LOCKED.SEM", 1, 0
  151.             FPutLn 1, "Chat is locked !"
  152.             FClose 1
  153.             STRING008 = "Chat is now locked !"
  154.             For WORD001 = 1 To INTEGER006
  155.                 If (TWORD003(WORD001 - 1)) PROC004(STRING008, WORD001)
  156.             Next
  157.             FAppend 7, STRING010, 1, 0
  158.             FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " LOCK THE CHAT"
  159.             FClose 7
  160.             Continue
  161.         Endif
  162.         If (Upper(Left(BIGSTR001, 8)) == "/UNLOCK ") Then
  163.             If (Exist(PPEPath() + "WORK\LOCKED.SEM")) Delete PPEPath() + "WORK\LOCKED.SEM"
  164.             STRING008 = "Chat is now unlocked !"
  165.             For WORD001 = 1 To INTEGER006
  166.                 If (TWORD003(WORD001 - 1)) PROC004(STRING008, WORD001)
  167.             Next
  168.             Continue
  169.             FAppend 7, STRING010, 1, 0
  170.             FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " UNLOCK THE CHAT"
  171.             FClose 7
  172.         Endif
  173.         If (Upper(Left(BIGSTR001, 5)) == "/WHO ") Then
  174.             FAppend 7, STRING010, 1, 0
  175.             FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " WATCH NODE ACTIVITY"
  176.             FClose 7
  177.             SaveScrn
  178.             CdChkOn
  179.             Call STRING015
  180.             CdChkOff
  181.             Color 15
  182.             StartDisp 1
  183.             RdUNet PcbNode()
  184.             WrUNet PcbNode(), "G", UN_Name(), UN_City(), "", ""
  185.             RestScrn
  186.             Continue
  187.         Endif
  188.         If (Upper(Left(BIGSTR001, 6)) == "/EDIT ") Then
  189.             GetUser
  190.             If (U_Sec < INTEGER013) Then
  191.                 PROC004("User editor is for sysop only !", INTEGER011)
  192.                 Goto LABEL001
  193.             Endif
  194.             FAppend 7, STRING010, 1, 0
  195.             FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " USES THE USER EDITOR"
  196.             FClose 7
  197.             SaveScrn
  198.             CdChkOn
  199.             Call STRING017
  200.             CdChkOff
  201.             Color 15
  202.             StartDisp 1
  203.             RdUNet PcbNode()
  204.             WrUNet PcbNode(), "G", UN_Name(), UN_City(), "", ""
  205.             RestScrn
  206.             :LABEL001
  207.             Continue
  208.         Endif
  209.         If (Upper(Left(BIGSTR001, 6)) == "/DOWN ") Then
  210.             If (Mid(BIGSTR001, 7, 1) == " ") Then
  211.                 PROC004("Download a file : /DOWN filename", INTEGER011)
  212.                 Goto LABEL002
  213.             Endif
  214.             STRING008 = Right(BIGSTR001, Len(BIGSTR001) - InStr(BIGSTR001, " ")) + " "
  215.             STRING008 = Left(STRING008, InStr(STRING008, " ") - 1)
  216.             PrintLn 
  217.             SaveScrn
  218.             FAppend 7, STRING010, 1, 0
  219.             FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " DOWNLOAD " + STRING008
  220.             FClose 7
  221.             Download STRING008
  222.             RdUNet PcbNode()
  223.             WrUNet PcbNode(), "G", UN_Name(), UN_City(), "", ""
  224.             RestScrn
  225.             :LABEL002
  226.             Continue
  227.         Endif
  228.         If (Upper(Left(BIGSTR001, 6)) == "/CALL ") Then
  229.             If (Mid(BIGSTR001, 7, 1) == " ") Then
  230.                 PROC004("Call somenone : /CALL n (n = Node number)", INTEGER011)
  231.                 Goto LABEL003
  232.             Endif
  233.             WORD001 = S2I(Mid(BIGSTR001, 7, 1), 10)
  234.             If ((WORD001 == 0) || (WORD001 > MaxNode())) Then
  235.                 PROC004("There is no node " + String(WORD001), INTEGER011)
  236.                 Goto LABEL003
  237.             Endif
  238.             FAppend 7, STRING010, 1, 0
  239.             FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " CALL NODE " + String(WORD001)
  240.             FClose 7
  241.             RdUNet WORD001
  242.             STRING008 = UN_Name() + " has been notified !"
  243.             If (Trim(STRING008, " ") == "") Then
  244.                 PROC004("There is curently nobody on node " + String(WORD001), INTEGER011)
  245.                 Goto LABEL003
  246.             Endif
  247.             Broadcast WORD001, WORD001, PCBMac("@USER@") + " wants to chat with you ! Type " + STRING014 + " to answer."
  248.             PROC004(STRING008, INTEGER011)
  249.             :LABEL003
  250.             Continue
  251.         Endif
  252.         If (Upper(Left(BIGSTR001, 5)) == "/MAC ") Then
  253.             STRING008 = Mid(BIGSTR001, InStr(BIGSTR001, " ") + 1, 3)
  254.             STRING008 = Mid(STRING008, 1, InStr(STRING008, " ") - 1)
  255.             WORD001 = S2I(STRING008, 10)
  256.             If (WORD001 == 0) Then
  257.                 PROC004("Macros : /MAC n MACRO (Record macro n) Or /n (Play macro n). 1 < n < 999", INTEGER011)
  258.                 Goto LABEL004
  259.             Endif
  260.             BIGSTR004 = Right(BIGSTR001, Len(BIGSTR001) - 6)
  261.             BIGSTR004 = Right(BIGSTR004, Len(BIGSTR004) - InStr(BIGSTR004, " "))
  262.             PROC011(BIGSTR004, WORD001)
  263.             PROC004("Macro " + String(WORD001) + " recorded !", INTEGER011)
  264.             :LABEL004
  265.             Continue
  266.         Endif
  267.         If (Upper(Left(BIGSTR001, 6)) == "/SEND ") Then
  268.             STRING008 = Mid(BIGSTR001, InStr(BIGSTR001, " ") + 1, 3)
  269.             STRING008 = Mid(STRING008, 1, InStr(STRING008, " ") - 1)
  270.             WORD001 = S2I(STRING008, 10)
  271.             If (WORD001 == 0) Then
  272.                 PROC004("Send a broadcast message : /SEND n MSG (n = Node number)", INTEGER011)
  273.                 Goto LABEL005
  274.             Endif
  275.             If (WORD001 > MaxNode()) Then
  276.                 PROC004("There is no node " + String(WORD001), INTEGER011)
  277.                 Goto LABEL005
  278.             Endif
  279.             BIGSTR004 = Right(BIGSTR001, Len(BIGSTR001) - 6)
  280.             BIGSTR004 = Right(BIGSTR004, Len(BIGSTR004) - InStr(BIGSTR004, " "))
  281.             FAppend 7, STRING010, 1, 0
  282.             FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " SEND BROADCAST TO NODE " + String(WORD001)
  283.             FPutLn 7, BIGSTR004
  284.             FClose 7
  285.             Broadcast WORD001, WORD001, BIGSTR004
  286.             PROC004("Broadcast sent !", INTEGER011)
  287.             :LABEL005
  288.             Continue
  289.         Endif
  290.         If (Upper(Left(BIGSTR001, 5)) == "/ZAP ") Then
  291.             If (BOOLEAN007) Goto LABEL006
  292.             PROC004("/ZAP has been disabled by the sysop !", INTEGER011)
  293.             Goto LABEL007
  294.             :LABEL006
  295.             STRING008 = Mid(BIGSTR001, InStr(BIGSTR001, " ") + 1, 3)
  296.             STRING008 = Mid(STRING008, 1, InStr(STRING008, " ") - 1)
  297.             WORD001 = S2I(STRING008, 10)
  298.             If (WORD001 == 0) Then
  299.                 PROC004("Write for someone else : /ZAP n MESSAGE (n = Window to type in)", INTEGER011)
  300.                 Goto LABEL007
  301.             Endif
  302.             WORD002 = TWORD003(WORD001 - 1)
  303.             If (WORD002 == 0) Then
  304.                 PROC004("Nobody to zap in window #" + String(WORD001), INTEGER011)
  305.                 Goto LABEL007
  306.             Endif
  307.             RdUNet WORD002
  308.             WORD002 = U_RecNum(UN_Name())
  309.             GetAltUser WORD002
  310.             WORD002 = U_Sec
  311.             GetUser
  312.             INTEGER009 = U_Sec
  313.             If (INTEGER009 <= WORD002) Then
  314.                 PROC004(PCBMac("@USER@") + ", your security is not high enough to zap #" + String(WORD001) + " ! (" + String(INTEGER009) + "/" + String(WORD002) + ")", WORD001)
  315.                 Goto LABEL007
  316.             Endif
  317.             BIGSTR004 = Right(BIGSTR001, Len(BIGSTR001) - 6)
  318.             BIGSTR004 = Right(BIGSTR004, Len(BIGSTR004) - InStr(BIGSTR004, " "))
  319.             FAppend 7, STRING010, 1, 0
  320.             FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " ZAP COMMAND TO #" + String(WORD001)
  321.             FPutLn 7, BIGSTR004
  322.             FClose 7
  323.             PROC015(BIGSTR004, WORD001)
  324.             :LABEL007
  325.             Continue
  326.         Endif
  327.         If (Upper(Left(BIGSTR001, 6)) == "/PLUG ") Then
  328.             If (BOOLEAN008) Goto LABEL008
  329.             PROC004("/PLUG has been disabled by the sysop !", INTEGER011)
  330.             Goto LABEL009
  331.             :LABEL008
  332.             STRING008 = Mid(BIGSTR001, InStr(BIGSTR001, " ") + 1, 3)
  333.             STRING008 = Mid(STRING008, 1, InStr(STRING008, " ") - 1)
  334.             WORD001 = S2I(STRING008, 10)
  335.             If (WORD001 == 0) Then
  336.                 PROC004("Write Directly into alternate window : /PLUG n MSG (n = Window to plug in)", INTEGER011)
  337.                 Goto LABEL009
  338.             Endif
  339.             WORD002 = TWORD003(WORD001 - 1)
  340.             If (WORD002 == 0) Then
  341.                 PROC004("Nobody to plug in window #" + String(WORD001), INTEGER011)
  342.                 Goto LABEL009
  343.             Endif
  344.             RdUNet WORD002
  345.             WORD002 = U_RecNum(UN_Name())
  346.             GetAltUser WORD002
  347.             WORD002 = U_Sec
  348.             GetUser
  349.             INTEGER009 = U_Sec
  350.             If (INTEGER009 <= WORD002) Then
  351.                 PROC004(PCBMac("@USER@") + ", your security is not high enough to plug #" + String(WORD001) + " ! (" + String(INTEGER009) + "/" + String(WORD002) + ")", WORD001)
  352.                 Goto LABEL009
  353.             Endif
  354.             BIGSTR004 = Right(BIGSTR001, Len(BIGSTR001) - 6)
  355.             BIGSTR004 = Right(BIGSTR004, Len(BIGSTR004) - InStr(BIGSTR004, " "))
  356.             FAppend 7, STRING010, 1, 0
  357.             FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " PLUG COMMAND TO #" + String(WORD001)
  358.             FPutLn 7, BIGSTR004
  359.             FClose 7
  360.             PROC003(BIGSTR004, WORD001)
  361.             :LABEL009
  362.             Continue
  363.         Endif
  364.         If (Upper(Left(BIGSTR001, 7)) == "/EJECT ") Then
  365.             If (BOOLEAN009) Goto LABEL010
  366.             PROC004("/EJECT has been disabled by the sysop !", INTEGER011)
  367.             Goto LABEL011
  368.             :LABEL010
  369.             STRING008 = Mid(BIGSTR001, InStr(BIGSTR001, " ") + 1, 3)
  370.             STRING008 = Mid(STRING008, 1, InStr(STRING008, " ") - 1)
  371.             WORD001 = S2I(STRING008, 10)
  372.             If (WORD001 == 0) Then
  373.                 PROC004("Eject a user from the chat : /EJECT n (n = Window # of user to eject)", INTEGER011)
  374.                 Goto LABEL011
  375.             Endif
  376.             WORD002 = TWORD003(WORD001 - 1)
  377.             If (WORD002 == 0) Then
  378.                 PROC004("Nobody to eject in window #" + String(WORD001), INTEGER011)
  379.                 Goto LABEL011
  380.             Endif
  381.             RdUNet WORD002
  382.             WORD002 = U_RecNum(UN_Name())
  383.             GetAltUser WORD002
  384.             WORD002 = U_Sec
  385.             GetUser
  386.             INTEGER009 = U_Sec
  387.             If (INTEGER009 <= WORD002) Then
  388.                 PROC004(PCBMac("@USER@") + ", your security is not high enough to eject #" + String(WORD001) + " ! (" + String(INTEGER009) + "/" + String(WORD002) + ")", WORD001)
  389.                 Goto LABEL011
  390.             Endif
  391.             FAppend 7, STRING010, 1, 0
  392.             FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " EJECT #" + String(WORD001)
  393.             FClose 7
  394.             If (WORD001 == 10) WORD001 = 0
  395.             FOpen 1, PPEPath() + "WORK\EJECT." + I2S(WORD001, 10), 1, 0
  396.             FPutLn 1, "Go away !"
  397.             FClose 1
  398.             :LABEL011
  399.             Continue
  400.         Endif
  401.         If (Left(BIGSTR001, 1) == "/") Then
  402.             STRING008 = Mid(BIGSTR001, 1, 10) + " "
  403.             STRING008 = Mid(STRING008, 2, InStr(STRING008, " ") - 2)
  404.             WORD001 = S2I(STRING008, 10)
  405.             If (WORD001 == 0) Goto LABEL012
  406.             BIGSTR001 = FUNCTION005(WORD001)
  407.             If (BIGSTR001 == "") Continue
  408.         Endif
  409.         :LABEL012
  410.         If (Upper(Left(BIGSTR001, 5)) == "/PVT ") Then
  411.             STRING008 = Mid(BIGSTR001, InStr(BIGSTR001, " ") + 1, 3)
  412.             STRING008 = Mid(STRING008, 1, InStr(STRING008, " ") - 1)
  413.             If (STRING008 == "*") Then
  414.                 WORD001 = -1
  415.                 Goto LABEL013
  416.             Endif
  417.             WORD001 = S2I(STRING008, 10)
  418.             :LABEL013
  419.             If (WORD001 == 0) Then
  420.                 PROC004("Send a private message : /PVT n MSG... (n = Window to send message to)", INTEGER011)
  421.                 Goto LABEL014
  422.             Endif
  423.             STRING008 = PCBMac("@USER@") + ": "
  424.             BIGSTR004 = Right(BIGSTR001, Len(BIGSTR001) - 5)
  425.             BIGSTR004 = Right(BIGSTR004, Len(BIGSTR004) - InStr(BIGSTR004, " "))
  426.             STRING008 = Left(STRING008 + BIGSTR004, 80)
  427.             If (WORD001 == -1) Then
  428.                 For WORD001 = 1 To INTEGER006
  429.                     If (TWORD003(WORD001 - 1)) PROC004(STRING008, WORD001)
  430.                 Next
  431.             Endif
  432.             If (TWORD003(WORD001 - 1)) Then
  433.                 PROC004(STRING008, WORD001)
  434.                 FAppend 7, STRING010, 1, 0
  435.                 FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " PRIVATE TO #" + String(WORD001)
  436.                 FPutLn 7, STRING008
  437.                 FClose 7
  438.                 Goto LABEL014
  439.             Endif
  440.             PROC004("There is nobody in window #" + String(WORD001), INTEGER011)
  441.             :LABEL014
  442.             Continue
  443.         Endif
  444.         If (Upper(Left(BIGSTR001, 6)) == "/SWAP ") Then
  445.             If (BOOLEAN006) Goto LABEL015
  446.             PROC004("/SWAP has been disabled by the sysop !", INTEGER011)
  447.             Goto LABEL017
  448.             :LABEL015
  449.             STRING008 = Mid(BIGSTR001, InStr(BIGSTR001, " ") + 1, 3)
  450.             STRING008 = Mid(STRING008, 1, InStr(STRING008, " ") - 1)
  451.             WORD001 = S2I(STRING008, 10)
  452.             If (WORD001 == 0) Then
  453.                 PROC004("SWAP two windows : /SWAP n (n = Window to swap with)", INTEGER011)
  454.                 Goto LABEL017
  455.             Endif
  456.             WORD001 = S2I(Mid(BIGSTR001, 7, 2), 10)
  457.             If (WORD001 <= INTEGER006) Then
  458.                 If (TWORD003(WORD001 - 1) == 0) Then
  459.                     If (Exist(PPEPath() + "WORK\CHAT." + String(INTEGER011))) Delete PPEPath() + "WORK\CHAT." + String(INTEGER011)
  460.                     TWORD003(INTEGER011 - 1) = 0
  461.                     TWORD003(WORD001 - 1) = PcbNode()
  462.                     FOpen 1, STRING009, 2, 3
  463.                     FSeek 1, (INTEGER011 - 1) * 2, 0
  464.                     FWrite 1, 0, 2
  465.                     FSeek 1, (WORD001 - 1) * 2, 0
  466.                     FWrite 1, ToWord(PcbNode()), 2
  467.                     INTEGER011 = WORD001
  468.                     PROC002(1)
  469.                     FClose 1
  470.                     PROC005()
  471.                     PROC001()
  472.                     Goto LABEL016
  473.                 Endif
  474.                 WORD002 = TWORD003(WORD001 - 1)
  475.                 RdUNet WORD002
  476.                 WORD002 = U_RecNum(UN_Name())
  477.                 GetAltUser WORD002
  478.                 WORD002 = U_Sec
  479.                 GetUser
  480.                 INTEGER009 = U_Sec
  481.                 If (INTEGER009 <= WORD002) Then
  482.                     PROC004(PCBMac("@USER@") + ", your security is not high enough to swap with #" + String(WORD001) + " ! (" + String(INTEGER009) + "/" + String(WORD002) + ")", WORD001)
  483.                     Goto LABEL016
  484.                 Endif
  485.                 If (Exist(PPEPath() + "WORK\CHAT." + String(INTEGER011))) Delete PPEPath() + "WORK\CHAT." + String(INTEGER011)
  486.                 PROC003("", INTEGER011)
  487.                 INTEGER009 = TWORD003(WORD001 - 1)
  488.                 FOpen 1, STRING009, 2, 3
  489.                 FSeek 1, (INTEGER011 - 1) * 2, 0
  490.                 FWrite 1, TWORD003(WORD001 - 1), 2
  491.                 FSeek 1, (WORD001 - 1) * 2, 0
  492.                 FWrite 1, ToWord(PcbNode()), 2
  493.                 INTEGER011 = WORD001
  494.                 PROC002(1)
  495.                 FClose 1
  496.                 PROC005()
  497.                 PROC010(INTEGER009, INTEGER011)
  498.                 PROC001()
  499.                 :LABEL016
  500.                 Goto LABEL017
  501.             Endif
  502.             PROC004("This place is not available !", INTEGER011)
  503.             :LABEL017
  504.             Continue
  505.         Endif
  506.         If (BOOLEAN002) Break
  507.         If (BIGSTR001 == "") Continue
  508.         PROC003(BIGSTR001, INTEGER011)
  509.     EndWhile
  510.     PROC007()
  511.     PROC014()
  512.     CdChkOn
  513.     AnsiPos 1, 1
  514.     End
  515.     :LABEL018
  516.     STRING008 = PCBMac("@USER@") + " - CARRIER LOST!"
  517.     FAppend 7, STRING010, 1, 0
  518.     FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " - CARRIER LOST !"
  519.     FPutLn 7, BIGSTR004
  520.     FClose 7
  521.     For WORD001 = 1 To INTEGER006
  522.         If (TWORD003(WORD001 - 1)) PROC004(STRING008, WORD001)
  523.     Next
  524.     PROC007()
  525.     PROC014()
  526.     CdChkOn
  527.     AnsiPos 1, 1
  528.     End
  529.  
  530. ;------------------------------------------------------------------------------
  531.  
  532.     Function FUNCTION002() String
  533.  
  534.     BigStr   BIGSTR006
  535.  
  536.     AnsiPos Len(STRING006) + 1, INTEGER003 + INTEGER002 - 1
  537.     BIGSTR002 = STRING006
  538.     BOOLEAN003 = 0
  539.     BOOLEAN002 = 0
  540.     BOOLEAN005 = 0
  541.     :LABEL019
  542.     If (!CDOn() && !OnLocal()) Return
  543.     STRING007 = FUNCTION004()
  544.     If (STRING007 <> "") Goto LABEL020
  545.     If ((INTEGER014 <> 0) && (Time() > INTEGER014 + 3)) Then
  546.         PROC004("", INTEGER011)
  547.         INTEGER014 = 0
  548.     Endif
  549.     INTEGER004 = INTEGER011
  550.     If (INTEGER004 == 10) INTEGER004 = 0
  551.     If (Exist(PPEPath() + "WORK\READSEM." + String(INTEGER004))) Then
  552.         INTEGER007 = GetX()
  553.         INTEGER008 = GetY()
  554.         PROC002(0)
  555.         PROC001()
  556.         Delete PPEPath() + "WORK\READSEM." + String(INTEGER004)
  557.         AnsiPos INTEGER007, INTEGER008
  558.     Endif
  559.     STRING007 = FUNCTION004()
  560.     If (STRING007 <> "") Goto LABEL020
  561.     If (Exist(PPEPath() + "WORK\SWAP." + String(PcbNode()))) Then
  562.         If (Exist(PPEPath() + "WORK\CHAT." + String(INTEGER011))) Delete PPEPath() + "WORK\CHAT." + String(INTEGER011)
  563.         PROC003("", INTEGER011)
  564.         INTEGER007 = GetX()
  565.         INTEGER008 = GetY()
  566.         FOpen 1, PPEPath() + "WORK\SWAP." + String(PcbNode()), 0, 0
  567.         FGet 1, INTEGER011
  568.         FClose 1
  569.         PROC002(0)
  570.         PROC001()
  571.         Delete PPEPath() + "WORK\SWAP." + String(PcbNode())
  572.         AnsiPos INTEGER007, INTEGER008
  573.     Endif
  574.     STRING007 = FUNCTION004()
  575.     If (STRING007 <> "") Goto LABEL020
  576.     INTEGER004 = INTEGER011
  577.     If (INTEGER004 == 10) INTEGER004 = 0
  578.     If (Exist(PPEPath() + "WORK\ZAP." + String(INTEGER004))) Then
  579.         FOpen 1, PPEPath() + "WORK\ZAP." + String(INTEGER004), 0, 0
  580.         FGet 1, BIGSTR004
  581.         BIGSTR004 = ReplaceStr(BIGSTR004, "@ENTER@", Chr(13) + Chr(10))
  582.         BIGSTR003 = BIGSTR003 + BIGSTR004
  583.         FClose 1
  584.         Delete PPEPath() + "WORK\ZAP." + String(INTEGER004)
  585.     Endif
  586.     STRING007 = FUNCTION004()
  587.     If (STRING007 <> "") Goto LABEL020
  588.     INTEGER004 = INTEGER011
  589.     If (INTEGER004 == 10) INTEGER004 = 0
  590.     If (Exist(PPEPath() + "WORK\PVT." + String(INTEGER004))) Then
  591.         Color 15
  592.         INTEGER007 = GetX()
  593.         INTEGER008 = GetY()
  594.         FOpen 1, PPEPath() + "WORK\PVT." + String(INTEGER004), 0, 0
  595.         FGet 1, STRING012
  596.         AnsiPos 1, 1
  597.         PrintLn STRING012 + Space(79 - Len(STRING012))
  598.         FClose 1
  599.         Delete PPEPath() + "WORK\PVT." + String(INTEGER004)
  600.         AnsiPos INTEGER007, INTEGER008
  601.     Endif
  602.     STRING007 = FUNCTION004()
  603.     If (STRING007 <> "") Goto LABEL020
  604.     INTEGER004 = INTEGER011
  605.     If (INTEGER004 == 10) INTEGER004 = 0
  606.     If (Exist(PPEPath() + "WORK\EJECT." + String(INTEGER004))) Then
  607.         PROC007()
  608.         PROC014()
  609.         End
  610.     Endif
  611.     STRING007 = FUNCTION004()
  612.     If (STRING007 <> "") Goto LABEL020
  613.     For INTEGER009 = 1 To 10
  614.         INTEGER004 = INTEGER009
  615.         If (INTEGER004 == 10) INTEGER004 = 0
  616.         If (Exist(PPEPath() + "WORK\CHAT." + String(INTEGER004))) Then
  617.             DWORD002 = Crc32(1, PPEPath() + "WORK\CHAT." + String(INTEGER004))
  618.             If (DWORD002 <> TDWORD001(INTEGER004)) Then
  619.                 TDWORD001(INTEGER004) = DWORD002
  620.                 Color 15
  621.                 INTEGER007 = GetX()
  622.                 INTEGER008 = GetY()
  623.                 FOpen 1, PPEPath() + "WORK\CHAT." + String(INTEGER004), 0, 0
  624.                 For WORD002 = 1 To INTEGER001
  625.                     FGet 1, STRING012
  626.                     AnsiPos 1, WORD002 + 2 + INTEGER001 * (INTEGER009 - 1) + INTEGER009 - 1
  627.                     If (Trim(STRING012, " ") == "") Then
  628.                         PrintLn Space(79)
  629.                         Continue
  630.                     Endif
  631.                     PrintLn STRING012 + Space(79 - Len(StripAtx(STRING012)))
  632.                 Next
  633.                 FClose 1
  634.                 AnsiPos INTEGER007, INTEGER008
  635.             Endif
  636.         Endif
  637.         STRING007 = FUNCTION004()
  638.         :LABEL020
  639.         If (STRING007 <> "") Then
  640.             If (Len(STRING007) < 2) Then
  641.                 If (STRING007 == Chr(27)) Then
  642.                     BOOLEAN002 = 1
  643.                     STRING007 = Chr(13)
  644.                     BOOLEAN005 = 0
  645.                     Goto LABEL024
  646.                 Endif
  647.                 If (STRING007 == Chr(13)) Then
  648.                     BOOLEAN005 = 1
  649.                     Goto LABEL024
  650.                 Endif
  651.                 If ((Asc(STRING007) > 31) && (Len(BIGSTR002) < 78)) Then
  652.                     Color 15
  653.                     Print STRING007
  654.                     BIGSTR002 = BIGSTR002 + STRING007
  655.                     Goto LABEL022
  656.                 Endif
  657.                 If (((Asc(STRING007) > 31) && (Len(BIGSTR002) == 78)) && BOOLEAN001) Then
  658.                     For INTEGER009 = Len(BIGSTR002) To 0 Step -1
  659.                         If (Mid(BIGSTR002, INTEGER009, 1) == " ") Break
  660.                     Next
  661.                     If (STRING007 == " ") Then
  662.                         Goto LABEL024
  663.                     Endif
  664.                     If (INTEGER009 == 0) Then
  665.                         BIGSTR003 = STRING007
  666.                         Goto LABEL021
  667.                     Endif
  668.                     Backup 78 - INTEGER009
  669.                     Print Space(78 - INTEGER009)
  670.                     Backup 78 - INTEGER009
  671.                     BIGSTR003 = Right(BIGSTR002, 78 - INTEGER009) + STRING007
  672.                     BIGSTR002 = Mid(BIGSTR002, 1, INTEGER009 - 1)
  673.                     :LABEL021
  674.                     Goto LABEL024
  675.                 Endif
  676.                 :LABEL022
  677.                 If (STRING007 == Chr(8)) Then
  678.                     If (Len(BIGSTR002) > 0) Then
  679.                         Backup 1
  680.                         Print "@X07 "
  681.                         Backup 1
  682.                         BIGSTR002 = Mid(BIGSTR002, 1, Len(BIGSTR002) - 1)
  683.                         Goto LABEL023
  684.                     Endif
  685.                     If (BOOLEAN004) Then
  686.                         BOOLEAN003 = 1
  687.                         Goto LABEL024
  688.                     Endif
  689.                 Endif
  690.                 :LABEL023
  691.                 Continue
  692.             Endif
  693.             If (STRING007 == "DOWN") Goto LABEL024
  694.         Endif
  695.     Next
  696.     Goto LABEL019
  697.     :LABEL024
  698.     FUNCTION002 = BIGSTR002
  699.  
  700.     EndFunc
  701.  
  702.  
  703. ;------------------------------------------------------------------------------
  704.  
  705.     Function FUNCTION001() BigStr
  706.  
  707.     For WORD001 = 1 To INTEGER001
  708.         AnsiPos 1, INTEGER003 + WORD001 - 1
  709.         ClrEol
  710.     Next
  711.     STRING001 = ""
  712.     STRING002 = ""
  713.     STRING003 = ""
  714.     STRING004 = ""
  715.     STRING005 = ""
  716.     :LABEL025
  717.     INTEGER002 = 1
  718.     If (INTEGER001 > 1) Then
  719.         BOOLEAN001 = 1
  720.     Else
  721.         BOOLEAN001 = 0
  722.     Endif
  723.     BOOLEAN004 = 0
  724.     STRING006 = STRING001
  725.     STRING001 = FUNCTION002()
  726.     If (BOOLEAN005 || BOOLEAN002) Goto LABEL028
  727.     If (INTEGER001 == 1) Goto LABEL028
  728.     :LABEL026
  729.     INTEGER002 = 2
  730.     If (INTEGER001 > 2) Then
  731.         BOOLEAN001 = 1
  732.     Else
  733.         BOOLEAN001 = 0
  734.     Endif
  735.     BOOLEAN004 = 1
  736.     STRING006 = STRING002
  737.     STRING002 = FUNCTION002()
  738.     If (BOOLEAN003) Goto LABEL025
  739.     If (BOOLEAN005 || BOOLEAN002) Goto LABEL028
  740.     If (INTEGER001 == 2) Goto LABEL028
  741.     :LABEL027
  742.     INTEGER002 = 3
  743.     If (INTEGER001 > 2) Then
  744.         BOOLEAN001 = 1
  745.     Else
  746.         BOOLEAN001 = 0
  747.     Endif
  748.     BOOLEAN004 = 1
  749.     STRING006 = STRING003
  750.     STRING003 = FUNCTION002()
  751.     If (BOOLEAN003) Goto LABEL026
  752.     If (BOOLEAN005 || BOOLEAN002) Goto LABEL028
  753.     If (INTEGER001 == 3) Goto LABEL028
  754.     INTEGER002 = 4
  755.     BOOLEAN001 = 0
  756.     BOOLEAN004 = 1
  757.     STRING006 = STRING004
  758.     STRING004 = FUNCTION002()
  759.     If (BOOLEAN003) Goto LABEL027
  760.     If (BOOLEAN005 || BOOLEAN002) Goto LABEL028
  761.     :LABEL028
  762.     If (BOOLEAN002) Then
  763.         FUNCTION001 = ""
  764.     Else
  765.         STRING001 = FUNCTION003(STRING001)
  766.         STRING002 = FUNCTION003(STRING002)
  767.         STRING003 = FUNCTION003(STRING003)
  768.         STRING004 = FUNCTION003(STRING004)
  769.         STRING005 = FUNCTION003(STRING005)
  770.         FUNCTION001 = STRING001
  771.         If (STRING002 <> "") Then
  772.             FUNCTION001 = FUNCTION001 + Chr(13) + Chr(10) + STRING002
  773.             If (STRING003 <> "") Then
  774.                 FUNCTION001 = FUNCTION001 + Chr(13) + Chr(10) + STRING003
  775.                 If (STRING004 <> "") Then
  776.                     FUNCTION001 = FUNCTION001 + Chr(13) + Chr(10) + STRING004
  777.                     If (STRING005 <> "") Then
  778.                         FUNCTION001 = FUNCTION001 + Chr(13) + Chr(10) + STRING005
  779.                     Endif
  780.                 Endif
  781.             Endif
  782.         Endif
  783.     Endif
  784.  
  785.     EndFunc
  786.  
  787.  
  788. ;------------------------------------------------------------------------------
  789.  
  790.     Procedure PROC001()
  791.  
  792.     For WORD002 = 1 To INTEGER006
  793.         If (TWORD003(WORD002 - 1)) Then
  794.             If (WORD002 <> INTEGER011) Then
  795.                 RdUNet TWORD003(WORD002 - 1)
  796.                 AnsiPos 1, (WORD002 - 1) * INTEGER001 + 1 + WORD002
  797.                 Print STRING013
  798.                 PROC008((WORD002 - 1) * INTEGER001 + 1 + WORD002)
  799.                 AnsiPos 6, (WORD002 - 1) * INTEGER001 + 1 + WORD002
  800.                 Print STRING016 + " @X0F" + String(WORD002) + " - " + FUNCTION006(UN_Name()) + " " + STRING016
  801.                 Goto LABEL029
  802.             Endif
  803.             AnsiPos 1, (WORD002 - 1) * INTEGER001 + 1 + WORD002
  804.             Print STRING013
  805.             PROC008((WORD002 - 1) * INTEGER001 + 1 + WORD002)
  806.             AnsiPos 6, (WORD002 - 1) * INTEGER001 + 1 + WORD002
  807.             Print STRING016 + " @X0F" + String(WORD002) + " - " + FUNCTION006(PCBMac("@USER@")) + " " + STRING016
  808.             :LABEL029
  809.             Continue
  810.         Endif
  811.         AnsiPos 1, (WORD002 - 1) * INTEGER001 + 1 + WORD002
  812.         Print STRING013
  813.         INTEGER009 = (WORD002 - 1) * INTEGER001 + 2 + WORD002
  814.         While (((1 < 0) && (INTEGER009 >= (WORD002 - 1) * INTEGER001 + 2 + WORD002 + INTEGER001 - 1)) || ((1 >= 0) && (INTEGER009 <= (WORD002 - 1) * INTEGER001 + 2 + WORD002 + INTEGER001 - 1))) Do
  815.             AnsiPos 1, INTEGER009
  816.             ClrEol
  817.             INTEGER009 = INTEGER009 + 1
  818.         EndWhile
  819.     Next
  820.  
  821.     EndProc
  822.  
  823.  
  824. ;------------------------------------------------------------------------------
  825.  
  826.     Procedure PROC002(Boolean BOOLEAN010)
  827.  
  828.     If (!BOOLEAN010) FOpen 1, STRING009, 0, 3
  829.     WORD004 = 0
  830.     FSeek 1, 0, 0
  831.     For WORD002 = 1 To INTEGER006
  832.         FRead 1, WORD001, 2
  833.         If (WORD001 <> 0) Then
  834.             TWORD003(WORD002 - 1) = WORD001
  835.             If (WORD001 == PcbNode()) INTEGER011 = WORD002
  836.             Inc WORD004
  837.             Continue
  838.         Endif
  839.         TWORD003(WORD002 - 1) = 0
  840.     Next
  841.     If (!BOOLEAN010) FClose 1
  842.  
  843.     EndProc
  844.  
  845.  
  846. ;------------------------------------------------------------------------------
  847.  
  848.     Procedure PROC003(BigStr BIGSTR007, Word WORD005)
  849.  
  850.     INTEGER004 = WORD005
  851.     If (INTEGER004 == 10) INTEGER004 = 0
  852.     FCreate 1, PPEPath() + "WORK\CHAT." + String(INTEGER004), 1, 3
  853.     FPutLn 1, BIGSTR007
  854.     FClose 1
  855.     FAppend 7, STRING010, 1, 0
  856.     FPutLn 7, PCBMac("     -*- @USER@ -------------------*>")
  857.     FPutLn 7, BIGSTR007
  858.     FClose 7
  859.  
  860.     EndProc
  861.  
  862.  
  863. ;------------------------------------------------------------------------------
  864.  
  865.     Procedure PROC005()
  866.  
  867.     For WORD002 = 1 To INTEGER006
  868.         If (TWORD003(WORD002 - 1) && (WORD002 <> INTEGER011)) Then
  869.             INTEGER004 = WORD002
  870.             If (INTEGER004 == 10) INTEGER004 = 0
  871.             FCreate 1, PPEPath() + "WORK\READSEM." + String(INTEGER004), 1, 0
  872.             FPutLn 1, "OrgFile changed... Reread requested."
  873.             FClose 1
  874.         Endif
  875.     Next
  876.  
  877.     EndProc
  878.  
  879.  
  880. ;------------------------------------------------------------------------------
  881.  
  882.     Procedure PROC006()
  883.  
  884.     If (Exist(STRING009)) Goto LABEL031
  885.     If (Exist(STRING011)) Then
  886.         PrintLn "@X0FPlease wait, a user on other node is creating group chat..."
  887.         PrintLn "@X0FPress Esc to quit or wait for availability..."
  888.         PrintLn 
  889.         Print "@X0F10"
  890.         INTEGER009 = 10
  891.         INTEGER010 = Time()
  892.         While (1) Do
  893.             If (Exist(STRING011)) Then
  894.                 If (Time() >= INTEGER010 + 10) Break
  895.                 If (INTEGER009 <> INTEGER010 + 10 - Time()) Then
  896.                     INTEGER009 = INTEGER010 + 10 - Time()
  897.                     Print "·" + String(INTEGER009)
  898.                     STRING007 = Inkey()
  899.                     If (STRING007 == Chr(27)) End
  900.                 Endif
  901.             EndWhile
  902.         Endif
  903.         If (Exist(STRING011)) Then
  904.             PrintLn "·@X0CTimeout!"
  905.             PrintLn 
  906.             PrintLn "@X0FCome back when the group chat is created..."
  907.             End
  908.         Endif
  909.     Endif
  910.     If (Exist(STRING009)) Goto LABEL031
  911.     PROC012()
  912.     If (INTEGER006 == 0) Then
  913.         INTEGER010 = 3
  914.         :LABEL030
  915.         InputInt "How many users (from 3 to 10) will be allowed ", INTEGER010, 15
  916.         PrintLn 
  917.         If ((INTEGER010 > 10) || ((INTEGER010 < 3) && (INTEGER010 <> 0))) Goto LABEL030
  918.         If (INTEGER010 == 0) Then
  919.             PROC013()
  920.             End
  921.         Endif
  922.         INTEGER006 = INTEGER010
  923.     Endif
  924.     INTEGER011 = 1
  925.     FCreate 1, STRING009, 2, 3
  926.     FWrite 1, ToWord(PcbNode()), 2
  927.     For INTEGER009 = 2 To INTEGER006
  928.         FWrite 1, 0, 2
  929.     Next
  930.     PROC002(1)
  931.     FClose 1
  932.     PROC013()
  933.     Goto LABEL032
  934.     :LABEL031
  935.     INTEGER010 = FileInf(STRING009, 4)
  936.     INTEGER006 = INTEGER010 / 2
  937.     FOpen 1, STRING009, 2, 3
  938.     FSeek 1, 0, 0
  939.     For WORD002 = 1 To INTEGER006
  940.         FRead 1, WORD001, 2
  941.         If ((WORD001 == 0) || (WORD001 == PcbNode())) Break
  942.     Next
  943.     INTEGER005 = WORD002
  944.     If (WORD002 == INTEGER006 + 1) Then
  945.         FClose 1
  946.         DispFile PPEPath() + "FULL", 0 + 4
  947.         PROC016(U_Name() + " knock at the door, but the chat is full!")
  948.         End
  949.     Endif
  950.     PROC002(1)
  951.     If (Exist(PPEPath() + "WORK\LOCKED.SEM")) Then
  952.         DispFile PPEPath() + "LOCKED", 0 + 4
  953.         PROC016(U_Name() + " knock at the door, but the chat is locked!")
  954.         End
  955.     Endif
  956.     FAppend 7, STRING010, 1, 0
  957.     FPutLn 7, "     --- " + String(Date()) + "  -  " + String(Time()) + " ---"
  958.     FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " ENTERS THE MULTICHAT IN WINDOW #" + String(INTEGER005)
  959.     FClose 7
  960.     INTEGER011 = INTEGER005
  961.     FSeek 1, (INTEGER011 - 1) * 2, 0
  962.     FWrite 1, ToWord(PcbNode()), 2
  963.     PROC002(1)
  964.     FClose 1
  965.     PROC005()
  966.     :LABEL032
  967.  
  968.     EndProc
  969.  
  970.  
  971. ;------------------------------------------------------------------------------
  972.  
  973.     Procedure PROC007()
  974.  
  975.     FAppend 7, STRING010, 1, 0
  976.     FPutLn 7, "     --- " + String(Date()) + "  -  " + String(Time()) + " ---"
  977.     FPutLn 7, PCBMac("     -*- @USER@ -------------------*>") + " LEAVES THE MULTICHAT"
  978.     FClose 7
  979.     FOpen 1, STRING009, 2, 3
  980.     FSeek 1, (INTEGER011 - 1) * 2, 0
  981.     FWrite 1, 0, 2
  982.     FClose 1
  983.     INTEGER004 = INTEGER011
  984.     If (INTEGER004 == 10) INTEGER004 = 0
  985.     If (Exist(PPEPath() + "WORK\CHAT." + String(INTEGER004))) Delete PPEPath() + "WORK\CHAT." + String(INTEGER004)
  986.     If (Exist(PPEPath() + "WORK\ZAP." + String(INTEGER004))) Delete PPEPath() + "WORK\ZAP." + String(INTEGER004)
  987.     If (Exist(PPEPath() + "WORK\PVT." + String(INTEGER004))) Delete PPEPath() + "WORK\PVT." + String(INTEGER004)
  988.     If (Exist(PPEPath() + "WORK\READSEM." + String(INTEGER004))) Delete PPEPath() + "WORK\READSEM." + String(INTEGER004)
  989.     If (Exist(PPEPath() + "WORK\EJECT." + String(INTEGER004))) Delete PPEPath() + "WORK\EJECT." + String(INTEGER004)
  990.     If (Exist(PPEPath() + "WORK\SWAP." + String(PcbNode()))) Delete PPEPath() + "WORK\SWAP." + String(PcbNode())
  991.     PROC005()
  992.     PROC002(0)
  993.     If (WORD004 == 0) Then
  994.         Delete STRING009
  995.         For INTEGER004 = 0 To 9
  996.             If (Exist(PPEPath() + "WORK\CHAT." + String(INTEGER004))) Delete PPEPath() + "WORK\CHAT." + String(INTEGER004)
  997.             If (Exist(PPEPath() + "WORK\ZAP." + String(INTEGER004))) Delete PPEPath() + "WORK\ZAP." + String(INTEGER004)
  998.             If (Exist(PPEPath() + "WORK\PVT." + String(INTEGER004))) Delete PPEPath() + "WORK\PVT." + String(INTEGER004)
  999.             If (Exist(PPEPath() + "WORK\READSEM." + String(INTEGER004))) Delete PPEPath() + "WORK\READSEM." + String(INTEGER004)
  1000.             If (Exist(PPEPath() + "WORK\EJECT." + String(INTEGER004))) Delete PPEPath() + "WORK\EJECT." + String(INTEGER004)
  1001.             If (Exist(PPEPath() + "WORK\SWAP." + String(INTEGER004))) Delete PPEPath() + "WORK\SWAP." + String(INTEGER004)
  1002.         Next
  1003.         If (Exist(PPEPath() + "WORK\LOCKED.SEM")) Delete PPEPath() + "WORK\LOCKED.SEM"
  1004.     Endif
  1005.  
  1006.     EndProc
  1007.  
  1008.  
  1009. ;------------------------------------------------------------------------------
  1010.  
  1011.     Function FUNCTION003(String STRING019) String
  1012.  
  1013.     Int      INT001
  1014.  
  1015.     STRING019 = ReplaceStr(STRING019, "@AUTOMORE", "@automore")
  1016.     STRING019 = ReplaceStr(STRING019, "@BEEP", "@beep")
  1017.     STRING019 = ReplaceStr(STRING019, "@CLREOL", "@clreol")
  1018.     STRING019 = ReplaceStr(STRING019, "@CLS", "@cls")
  1019.     STRING019 = ReplaceStr(STRING019, "@DELAY", "@delay")
  1020.     STRING019 = ReplaceStr(STRING019, "@DELAY", "@delay")
  1021.     STRING019 = ReplaceStr(STRING019, "@MORE", "@more")
  1022.     STRING019 = ReplaceStr(STRING019, "@PAUSE", "@pause")
  1023.     STRING019 = ReplaceStr(STRING019, "@POFF", "@poff")
  1024.     STRING019 = ReplaceStr(STRING019, "@PON", "@pon")
  1025.     STRING019 = ReplaceStr(STRING019, "@POS", "@pos")
  1026.     STRING019 = ReplaceStr(STRING019, "@QOFF", "@qoff")
  1027.     STRING019 = ReplaceStr(STRING019, "@QON", "@qon")
  1028.     STRING019 = ReplaceStr(STRING019, "@WAIT", "@wait")
  1029.     STRING019 = ReplaceStr(STRING019, "@WHO", "@who")
  1030.     FUNCTION003 = STRING019
  1031.  
  1032.     EndFunc
  1033.  
  1034.  
  1035. ;------------------------------------------------------------------------------
  1036.  
  1037.     Procedure PROC008(Int INT001)
  1038.  
  1039.     If (WORD004 > INTEGER012) Goto LABEL033
  1040.     STRING008 = ScrText(1, INT001, 79, 1)
  1041.     AnsiPos 1, INT001
  1042.     Print "@X08" + StripAtx(STRING008)
  1043.     Delay 1
  1044.     AnsiPos 1, INT001
  1045.     Print "@X07" + StripAtx(STRING008)
  1046.     Delay 1
  1047.     AnsiPos 1, INT001
  1048.     Print "@X0F" + StripAtx(STRING008)
  1049.     Delay 1
  1050.     AnsiPos 1, INT001
  1051.     Print "@X07" + StripAtx(STRING008)
  1052.     Delay 1
  1053.     AnsiPos 1, INT001
  1054.     Print "@X08" + StripAtx(STRING008)
  1055.     Delay 1
  1056.     AnsiPos 1, INT001
  1057.     Print STRING008
  1058.     :LABEL033
  1059.  
  1060.     EndProc
  1061.  
  1062.  
  1063. ;------------------------------------------------------------------------------
  1064.  
  1065.     Procedure PROC009()
  1066.  
  1067.     Select Case (INTEGER006)
  1068.         Case 3
  1069.             AnsiPos 1, 2
  1070.             PrintLn STRING013
  1071.             AnsiPos 1, 7
  1072.             PrintLn STRING013
  1073.             AnsiPos 1, 12
  1074.             PrintLn STRING013
  1075.             AnsiPos 1, 17
  1076.             PrintLn STRING013
  1077.             INTEGER001 = 4
  1078.             INTEGER003 = 18
  1079.         Case 4
  1080.             AnsiPos 1, 2
  1081.             PrintLn STRING013
  1082.             AnsiPos 1, 6
  1083.             PrintLn STRING013
  1084.             AnsiPos 1, 10
  1085.             PrintLn STRING013
  1086.             AnsiPos 1, 14
  1087.             PrintLn STRING013
  1088.             AnsiPos 1, 18
  1089.             PrintLn STRING013
  1090.             INTEGER001 = 3
  1091.             INTEGER003 = 19
  1092.         Case 5
  1093.             AnsiPos 1, 2
  1094.             PrintLn STRING013
  1095.             AnsiPos 1, 5
  1096.             PrintLn STRING013
  1097.             AnsiPos 1, 8
  1098.             PrintLn STRING013
  1099.             AnsiPos 1, 11
  1100.             PrintLn STRING013
  1101.             AnsiPos 1, 14
  1102.             PrintLn STRING013
  1103.             AnsiPos 1, 17
  1104.             PrintLn STRING013
  1105.             INTEGER001 = 2
  1106.             INTEGER003 = 18
  1107.         Case 6
  1108.             AnsiPos 1, 2
  1109.             PrintLn STRING013
  1110.             AnsiPos 1, 5
  1111.             PrintLn STRING013
  1112.             AnsiPos 1, 8
  1113.             PrintLn STRING013
  1114.             AnsiPos 1, 11
  1115.             PrintLn STRING013
  1116.             AnsiPos 1, 14
  1117.             PrintLn STRING013
  1118.             AnsiPos 1, 17
  1119.             PrintLn STRING013
  1120.             AnsiPos 1, 20
  1121.             PrintLn STRING013
  1122.             INTEGER001 = 2
  1123.             INTEGER003 = 21
  1124.         Case 7
  1125.             AnsiPos 1, 2
  1126.             PrintLn STRING013
  1127.             AnsiPos 1, 4
  1128.             PrintLn STRING013
  1129.             AnsiPos 1, 6
  1130.             PrintLn STRING013
  1131.             AnsiPos 1, 8
  1132.             PrintLn STRING013
  1133.             AnsiPos 1, 10
  1134.             PrintLn STRING013
  1135.             AnsiPos 1, 12
  1136.             PrintLn STRING013
  1137.             AnsiPos 1, 14
  1138.             PrintLn STRING013
  1139.             AnsiPos 1, 16
  1140.             PrintLn STRING013
  1141.             INTEGER001 = 1
  1142.             INTEGER003 = 17
  1143.         Case 8
  1144.             AnsiPos 1, 2
  1145.             PrintLn STRING013
  1146.             AnsiPos 1, 4
  1147.             PrintLn STRING013
  1148.             AnsiPos 1, 6
  1149.             PrintLn STRING013
  1150.             AnsiPos 1, 8
  1151.             PrintLn STRING013
  1152.             AnsiPos 1, 10
  1153.             PrintLn STRING013
  1154.             AnsiPos 1, 12
  1155.             PrintLn STRING013
  1156.             AnsiPos 1, 14
  1157.             PrintLn STRING013
  1158.             AnsiPos 1, 16
  1159.             PrintLn STRING013
  1160.             AnsiPos 1, 18
  1161.             PrintLn STRING013
  1162.             INTEGER001 = 1
  1163.             INTEGER003 = 19
  1164.         Case 9
  1165.             AnsiPos 1, 2
  1166.             PrintLn STRING013
  1167.             AnsiPos 1, 4
  1168.             PrintLn STRING013
  1169.             AnsiPos 1, 6
  1170.             PrintLn STRING013
  1171.             AnsiPos 1, 8
  1172.             PrintLn STRING013
  1173.             AnsiPos 1, 10
  1174.             PrintLn STRING013
  1175.             AnsiPos 1, 12
  1176.             PrintLn STRING013
  1177.             AnsiPos 1, 14
  1178.             PrintLn STRING013
  1179.             AnsiPos 1, 16
  1180.             PrintLn STRING013
  1181.             AnsiPos 1, 18
  1182.             PrintLn STRING013
  1183.             AnsiPos 1, 20
  1184.             PrintLn STRING013
  1185.             INTEGER001 = 1
  1186.             INTEGER003 = 21
  1187.         Case 10
  1188.             AnsiPos 1, 2
  1189.             PrintLn STRING013
  1190.             AnsiPos 1, 4
  1191.             PrintLn STRING013
  1192.             AnsiPos 1, 6
  1193.             PrintLn STRING013
  1194.             AnsiPos 1, 8
  1195.             PrintLn STRING013
  1196.             AnsiPos 1, 10
  1197.             PrintLn STRING013
  1198.             AnsiPos 1, 12
  1199.             PrintLn STRING013
  1200.             AnsiPos 1, 14
  1201.             PrintLn STRING013
  1202.             AnsiPos 1, 16
  1203.             PrintLn STRING013
  1204.             AnsiPos 1, 18
  1205.             PrintLn STRING013
  1206.             AnsiPos 1, 20
  1207.             PrintLn STRING013
  1208.             AnsiPos 1, 22
  1209.             PrintLn STRING013
  1210.             INTEGER001 = 1
  1211.             INTEGER003 = 23
  1212.     End Select
  1213.  
  1214.     EndProc
  1215.  
  1216.  
  1217. ;------------------------------------------------------------------------------
  1218.  
  1219.     Procedure PROC004(String STRING021, Word WORD006)
  1220.  
  1221.     INTEGER010 = WORD006
  1222.     If (INTEGER010 == 10) INTEGER010 = 0
  1223.     FCreate 1, PPEPath() + "WORK\PVT." + I2S(INTEGER010, 10), 1, 0
  1224.     FPutLn 1, STRING021
  1225.     FClose 1
  1226.     INTEGER010 = INTEGER011
  1227.     If (INTEGER010 == 10) INTEGER010 = 0
  1228.     If (INTEGER011 <> WORD006) Then
  1229.         FCreate 1, PPEPath() + "WORK\PVT." + I2S(INTEGER010, 10), 1, 0
  1230.         FPutLn 1, STRING021
  1231.         FClose 1
  1232.     Endif
  1233.  
  1234.     EndProc
  1235.  
  1236.  
  1237. ;------------------------------------------------------------------------------
  1238.  
  1239.     Procedure PROC010(Int INT002, Int INT003)
  1240.  
  1241.     FCreate 1, PPEPath() + "WORK\SWAP." + String(INT002), 1, 0
  1242.     FPutLn 1, INT003
  1243.     FClose 1
  1244.  
  1245.     EndProc
  1246.  
  1247.  
  1248. ;------------------------------------------------------------------------------
  1249.  
  1250.     Function FUNCTION004() String
  1251.  
  1252.     BigStr   BIGSTR008
  1253.  
  1254.     If (BIGSTR003 == "") Then
  1255.         STRING007 = Inkey()
  1256.     Else
  1257.         STRING007 = Left(BIGSTR003, 1)
  1258.         BIGSTR003 = Mid(BIGSTR003, 2, Len(BIGSTR003) - 1)
  1259.     Endif
  1260.     FUNCTION004 = STRING007
  1261.  
  1262.     EndFunc
  1263.  
  1264.  
  1265. ;------------------------------------------------------------------------------
  1266.  
  1267.     Procedure PROC011(BigStr BIGSTR008, Word WORD007)
  1268.  
  1269.     STRING008 = I2S(Crc32(0, U_Name()), 16)
  1270.     If (Exist(PPEPath() + "DATA\" + STRING008 + ".DAT")) Goto LABEL034
  1271.     Copy PPEPath() + "DATA\DEFAULT.DAT", PPEPath() + "DATA\" + STRING008 + ".DAT"
  1272.     Goto LABEL035
  1273.     :LABEL034
  1274.     FOpen 1, PPEPath() + "DATA\" + STRING008 + ".DAT", 0, 0
  1275.     :LABEL035
  1276.     If (Exist(PPEPath() + "WORK\TEMP.$$$")) Delete PPEPath() + "TEMP.$$$"
  1277.     FCreate 2, PPEPath() + "WORK\TEMP.$$$", 1, 0
  1278.     BIGSTR008 = ReplaceStr(BIGSTR008, Chr(13) + Chr(10), "@ENTER@")
  1279.     For WORD001 = 1 To WORD007 - 1
  1280.         FGet 1, BIGSTR005
  1281.         FPutLn 2, BIGSTR005
  1282.     Next
  1283.     FPutLn 2, BIGSTR008
  1284.     FGet 1, BIGSTR005
  1285.     If (Ferr(1)) Goto LABEL036
  1286.     While (1) Do
  1287.         FGet 1, BIGSTR005
  1288.         If (Ferr(1)) Break
  1289.         FPutLn 2, BIGSTR005
  1290.     EndWhile
  1291.     :LABEL036
  1292.     FClose 1
  1293.     FClose 2
  1294.     Delete PPEPath() + "DATA\" + STRING008 + ".DAT"
  1295.     Rename PPEPath() + "WORK\TEMP.$$$", PPEPath() + "DATA\" + STRING008 + ".DAT"
  1296.  
  1297.     EndProc
  1298.  
  1299.  
  1300. ;------------------------------------------------------------------------------
  1301.  
  1302.     Function FUNCTION005(Word WORD008) BigStr
  1303.  
  1304.     BigStr   BIGSTR010
  1305.  
  1306.     STRING008 = I2S(Crc32(0, U_Name()), 16)
  1307.     If (Exist(PPEPath() + "DATA\" + STRING008 + ".DAT")) Goto LABEL037
  1308.     Copy PPEPath() + "DATA\DEFAULT.DAT", PPEPath() + "DATA\" + STRING008 + ".DAT"
  1309.     :LABEL037
  1310.     BIGSTR005 = ReadLine(PPEPath() + "DATA\" + STRING008 + ".DAT", WORD008)
  1311.     FClose -1
  1312.     If (BIGSTR005 == "") Then
  1313.         PROC004(String(WORD008) + ": Empty macro", INTEGER011)
  1314.     Endif
  1315.     FUNCTION005 = ReplaceStr(BIGSTR005, "@ENTER@", Chr(13) + Chr(10))
  1316.  
  1317.     EndFunc
  1318.  
  1319.  
  1320. ;------------------------------------------------------------------------------
  1321.  
  1322.     Procedure PROC015(BigStr BIGSTR010, Word WORD009)
  1323.  
  1324.     INTEGER010 = WORD009
  1325.     If (INTEGER010 == 10) INTEGER010 = 0
  1326.     FCreate 1, PPEPath() + "WORK\ZAP." + String(INTEGER010), 1, 0
  1327.     BIGSTR010 = ReplaceStr(BIGSTR010, Chr(13) + Chr(10), "@ENTER@")
  1328.     FPutLn 1, BIGSTR010
  1329.     FClose 1
  1330.  
  1331.     EndProc
  1332.  
  1333.  
  1334. ;------------------------------------------------------------------------------
  1335.  
  1336.     Procedure PROC012()
  1337.  
  1338.     FCreate 1, STRING011, 1, 3
  1339.     FPutLn 1, "Hold on!"
  1340.     FClose 1
  1341.  
  1342.     EndProc
  1343.  
  1344.  
  1345. ;------------------------------------------------------------------------------
  1346.  
  1347.     Procedure PROC013()
  1348.  
  1349.     If (Exist(STRING011)) Delete STRING011
  1350.  
  1351.     EndProc
  1352.  
  1353.  
  1354. ;------------------------------------------------------------------------------
  1355.  
  1356.     Procedure PROC014()
  1357.  
  1358.     Color 15
  1359.     Cls
  1360.     AnsiPos 33, 11
  1361.     Color 8
  1362.     Gosub LABEL038
  1363.     Color 7
  1364.     Gosub LABEL038
  1365.     Color 15
  1366.     Gosub LABEL038
  1367.     Color 7
  1368.     Gosub LABEL038
  1369.     Color 8
  1370.     Gosub LABEL038
  1371.     Color 15
  1372.     Print "              "
  1373.     Goto LABEL039
  1374.     :LABEL038
  1375.     Print "<┤EGiS CoRP'94"
  1376.     Delay 2
  1377.     Backup 14
  1378.     Return
  1379.     :LABEL039
  1380.  
  1381.     EndProc
  1382.  
  1383.  
  1384. ;------------------------------------------------------------------------------
  1385.  
  1386.     Function FUNCTION006(String STRING023) String
  1387.  
  1388.     String   STRING025
  1389.  
  1390.     STRING008 = Upper(STRING023)
  1391.     STRING008 = Replace(STRING008, "A", "a")
  1392.     STRING008 = Replace(STRING008, "E", "e")
  1393.     STRING008 = Replace(STRING008, "I", "i")
  1394.     STRING008 = Replace(STRING008, "O", "o")
  1395.     STRING008 = Replace(STRING008, "U", "u")
  1396.     FUNCTION006 = STRING008
  1397.  
  1398.     EndFunc
  1399.  
  1400.  
  1401. ;------------------------------------------------------------------------------
  1402.  
  1403.     Procedure PROC016(String STRING025)
  1404.  
  1405.     STRING008 = STRING025
  1406.     For WORD001 = 1 To INTEGER006
  1407.         If (TWORD003(WORD001 - 1)) Then
  1408.             INTEGER010 = WORD001
  1409.             If (INTEGER010 == 10) INTEGER010 = 0
  1410.             FCreate 2, PPEPath() + "WORK\PVT." + I2S(INTEGER010, 10), 1, 0
  1411.             FPutLn 2, STRING008
  1412.             FClose 2
  1413.         Endif
  1414.     Next
  1415.  
  1416.     EndProc
  1417.  
  1418.  
  1419. ;------------------------------------------------------------------------------
  1420. ;
  1421. ; Usage report (before postprocessing)
  1422. ;
  1423. ; ■ Statements used :
  1424. ;
  1425. ;    8       End
  1426. ;    2       Cls
  1427. ;    2       ClrEol
  1428. ;    1       Wait
  1429. ;    12      Color 
  1430. ;    242     Goto 
  1431. ;    287     Let 
  1432. ;    18      Print 
  1433. ;    72      PrintLn 
  1434. ;    197     If 
  1435. ;    3       DispFile 
  1436. ;    10      FCreate 
  1437. ;    12      FOpen 
  1438. ;    15      FAppend 
  1439. ;    40      FClose 
  1440. ;    7       FGet 
  1441. ;    36      FPutLn 
  1442. ;    4       StartDisp 
  1443. ;    5       GetUser
  1444. ;    29      Delete 
  1445. ;    1       InputInt 
  1446. ;    5       Gosub 
  1447. ;    2       Return
  1448. ;    5       CdChkOn
  1449. ;    4       CdChkOff
  1450. ;    6       Delay 
  1451. ;    1       Inc 
  1452. ;    2       Call 
  1453. ;    2       Broadcast 
  1454. ;    10      RdUNet 
  1455. ;    4       WrUNet 
  1456. ;    83      AnsiPos 
  1457. ;    5       Backup 
  1458. ;    4       SaveScrn
  1459. ;    4       RestScrn
  1460. ;    1       Rename 
  1461. ;    8       FSeek 
  1462. ;    2       FRead 
  1463. ;    8       FWrite 
  1464. ;    2       Copy 
  1465. ;    1       Download 
  1466. ;    4       GetAltUser 
  1467. ;    16      EndProc
  1468. ;    6       EndFunc
  1469. ;
  1470. ;
  1471. ; ■ Functions used :
  1472. ;
  1473. ;    7       -
  1474. ;    17      *
  1475. ;    1       /
  1476. ;    353     +
  1477. ;    75      -
  1478. ;    80      ==
  1479. ;    19      <>
  1480. ;    21      <
  1481. ;    23      <=
  1482. ;    11      >
  1483. ;    36      >=
  1484. ;    126     !
  1485. ;    43      &&
  1486. ;    25      ||
  1487. ;    21      Len(
  1488. ;    15      Upper()
  1489. ;    24      Mid()
  1490. ;    19      Left()
  1491. ;    12      Right()
  1492. ;    4       Space()
  1493. ;    2       Ferr()
  1494. ;    21      Chr()
  1495. ;    2       Asc()
  1496. ;    22      InStr()
  1497. ;    2       Trim()
  1498. ;    2       Date()
  1499. ;    8       Time()
  1500. ;    4       U_Name()
  1501. ;    6       StripAtx()
  1502. ;    5       Replace()
  1503. ;    2       Inkey()
  1504. ;    92      String()
  1505. ;    98      PPEPath()
  1506. ;    22      PcbNode()
  1507. ;    12      ReadLine()
  1508. ;    2       OnLocal()
  1509. ;    10      UN_Name()
  1510. ;    4       UN_City()
  1511. ;    1       GetToken()
  1512. ;    37      Exist()
  1513. ;    6       I2S()
  1514. ;    17      S2I()
  1515. ;    2       CDOn()
  1516. ;    4       GetX()
  1517. ;    4       GetY()
  1518. ;    1       FileInf()
  1519. ;    2       MaxNode()
  1520. ;    4       U_RecNum()
  1521. ;    1       ScrText()
  1522. ;    19      ReplaceStr()
  1523. ;    4       ToWord()
  1524. ;    3       Crc32()
  1525. ;    23      PCBMac()
  1526. ;
  1527. ;------------------------------------------------------------------------------
  1528. ;
  1529. ; Analysis flags : RC
  1530. ;
  1531. ; R - Read user ■ 5
  1532. ;     User records are read, this may signify that someone wants to get
  1533. ;     various informations about a user (for example his password), but
  1534. ;     this may also be normal for a program accessing user records (for
  1535. ;     example a User Editor)
  1536. ;     ■ Search for : GETALTUSER
  1537. ;
  1538. ; C - Call child PPE ■ 3
  1539. ;     This is usually normal, but may be a tricky way to launch some
  1540. ;     sysop-only commands.
  1541. ;     ■ Search for : CALL
  1542. ;
  1543. ;------------------------------------------------------------------------------
  1544. ;
  1545. ; Postprocessing report
  1546. ;
  1547. ;    16      For/Next
  1548. ;    4       While/EndWhile
  1549. ;    85      If/Then or If/Then/Else
  1550. ;    1       Select Case
  1551. ;
  1552. ;------------------------------------------------------------------------------
  1553. ;                 AEGiS Corp - Break the routines, code against the machines!
  1554. ;------------------------------------------------------------------------------
  1555.